package edu.ustb.efws.base.mapper;

import edu.ustb.efws.base.domain.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户数据操作
 *
 * @author TS Group
 */
@Mapper
public interface UserMapper {

    /**
     * 新增用户
     *
     * @param t {@link User}
     * @return 修改条数
     */
    int insert(User t);

    /**
     * 修改用户
     *
     * @param t {@link User}
     * @return 修改条数
     */
    int update(User t);

    /**
     * 删除用户
     *
     * @param id 用户编号
     * @param username 用户名
     * @return 删除条数
     */
    int delete(@Param("id") long id, @Param("username")String username);

    /**
     * 修改密码
     *
     * @param id 用户编号
     * @param password 密码
     * @return 修改条数
     */
    int updatePassword(@Param("id")long id, @Param("password")String password);

    /**
     * 查询用户名称记录数
     *
     * @param username 用户名
     * @return 记录数
     */
    int usernameCount(@Param("username") String username);

    /**
     * 获取用户
     *
     * @param id 用户编号
     * @return 用户
     */
    User findOne(@Param("id") long id);

    /**
     * 通过用户名查询用户
     *
     * @param username 用户名
     * @return {@link User}
     */
    User findOneByUsername(@Param("username")String username);

    /**
     * 查询需要发送短信用户
     *
     * @return 用户集合
     */
    List<User> findSms();

    /**
     * 查询用户数
     *
     * @param username 用户名
     * @param name 名称
     * @return 记录数
     */
    long count(@Param("username") String username,@Param("name") String name);

    /**
     * 查询用户
     *
     * @param username 用户名
     * @param name 姓名
     * @param offset 偏移量
     * @param limit 查询记录数
     * @return 用户集合
     */
    List<User> find(@Param("username")String username, @Param("name")String name,
                    @Param("offset")int offset, @Param("limit")int limit);
}